home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the 3D Game Programming Gurus / gurus.iso / DirectX / dx9sdkcp.exe / SDK (C++) / Include / DShowIDL / tuner.idl < prev    next >
Encoding:
Text File  |  2002-11-12  |  75.3 KB  |  2,255 lines

  1. //------------------------------------------------------------------------------
  2. // File: Tuner.idl
  3. //
  4. // Desc: 
  5. //
  6. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  7. //------------------------------------------------------------------------------
  8.  
  9.  
  10. cpp_quote("//+-------------------------------------------------------------------------")
  11. cpp_quote("//")
  12. cpp_quote("//  Microsoft Windows")
  13. cpp_quote("//  Copyright (C) Microsoft Corporation, 1999-2000.")
  14. cpp_quote("//")
  15. cpp_quote("//--------------------------------------------------------------------------")
  16. cpp_quote("#pragma once")
  17.  
  18. #include <olectl.h>
  19. #ifndef DO_NO_IMPORTS
  20. import "oaidl.idl";
  21. import "comcat.idl";
  22. import "strmif.idl";
  23. import "bdatypes.h";
  24. import "regbag.idl";
  25. #endif
  26.  
  27. cpp_quote("#include <bdatypes.h>")
  28.  
  29. interface ITuningSpaceContainer;
  30. interface ITuningSpace;
  31. interface IEnumTuningSpaces;
  32. interface ITuneRequest;
  33. interface ITuner;
  34. interface IScanningTuner;
  35. interface IEnumComponentTypes;
  36. interface IComponentTypes;
  37. interface IComponentType;
  38. interface ILanguageComponentType;
  39. interface IEnumComponents;
  40. interface IComponents;
  41. interface IComponent;
  42. interface IMPEG2ComponentType;
  43. interface IMPEG2Component;
  44. interface ILocator;
  45. interface IATSCLocator;
  46. interface IDVBSLocator;
  47. interface IDVBTLocator;
  48. interface IDVBCLocator;
  49.  
  50. // tuner.idl:
  51. //  interface ITuningSpaceContainer : IDispatch
  52. //  interface ITuningSpace : IDispatch
  53. //  interface ITuneRequest : IDispatch
  54. //  interface IComponentType : IDispatch
  55. //  interface ILanguageComponentType : IComponentType
  56. //  interface IComponentTypes : IDispatch
  57. //  interface IComponent : IDispatch
  58. //  interface IComponents : IDispatch
  59. //  interface ITVTuningSpace : ITuningSpace
  60. //  interface IFMRadioTuningSpace : ITuningSpace
  61. //  interface IAMRadioTuningSpace : ITuningSpace
  62. //  interface IAnalogTVTuningSpace : ITVTuningSpace
  63. //  interface IAnalogTVAudioComponent : IComponent
  64. //  interface IAnalogTVDataComponent : IComponent
  65. //  interface IChannelTuneRequest : ITuneRequest
  66. //  interface IDVBComponent : IComponent
  67. //  interface IDVBTuneRequest : ITuneRequest
  68.  
  69. // DISPIDs for ITuningSpaces interface
  70. // we don't expect to inherit from this interface and consequently there's
  71. //     no chance of collision, thus we'll allow midl to auto assign ids for this one
  72.  
  73. // DISPIDs for ITuningSpace interface
  74. enum {
  75. DISPID_TUNER_TS_UNIQUENAME                      = 1,
  76. DISPID_TUNER_TS_FRIENDLYNAME                    = 2,
  77. DISPID_TUNER_TS_CLSID                            = 3,
  78. DISPID_TUNER_TS_NETWORKTYPE                     = 4,
  79. DISPID_TUNER_TS__NETWORKTYPE                    = 5,
  80. DISPID_TUNER_TS_CREATETUNEREQUEST               = 6,
  81. DISPID_TUNER_TS_ENUMCATEGORYGUIDS               = 7,
  82. DISPID_TUNER_TS_ENUMDEVICEMONIKERS              = 8,
  83. DISPID_TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES  = 9,
  84. DISPID_TUNER_TS_FREQMAP                            = 10,
  85. DISPID_TUNER_TS_DEFLOCATOR                        = 11,
  86. DISPID_TUNER_TS_CLONE                            = 12,
  87.  
  88. // DISPIDs for ITuneRequest interface
  89. DISPID_TUNER_TR_TUNINGSPACE                     = 1,
  90. DISPID_TUNER_TR_COMPONENTS                      = 2,
  91. DISPID_TUNER_TR_CLONE                           = 3,
  92. DISPID_TUNER_TR_LOCATOR                         = 4,
  93.  
  94.  
  95. // DISPID for IComponentType interface
  96. DISPID_TUNER_CT_CATEGORY                        = 1,
  97. DISPID_TUNER_CT_MEDIAMAJORTYPE                    = 2,
  98. DISPID_TUNER_CT__MEDIAMAJORTYPE                 = 3,
  99. DISPID_TUNER_CT_MEDIASUBTYPE                       = 4,
  100. DISPID_TUNER_CT__MEDIASUBTYPE                    = 5,
  101. DISPID_TUNER_CT_MEDIAFORMATTYPE                 = 6,
  102. DISPID_TUNER_CT__MEDIAFORMATTYPE                 = 7,
  103. DISPID_TUNER_CT_MEDIATYPE                        = 8,
  104. DISPID_TUNER_CT_CLONE                           = 9,
  105.  
  106.  
  107. // DISPID for ILanguageComponentType interface
  108. DISPID_TUNER_LCT_LANGID                         = 100,
  109.  
  110. // DISPID for IMPEG2ComponentType interface
  111. DISPID_TUNER_MP2CT_TYPE                         = 200,
  112.  
  113. // DISPID for IATSCComponentType interface
  114. DISPID_TUNER_ATSCCT_FLAGS                       = 300,
  115.  
  116. // DISPID for ILocator interface
  117. DISPID_TUNER_L_CARRFREQ                         = 1,
  118. DISPID_TUNER_L_INNERFECMETHOD                   = 2,
  119. DISPID_TUNER_L_INNERFECRATE                     = 3,
  120. DISPID_TUNER_L_OUTERFECMETHOD                   = 4,
  121. DISPID_TUNER_L_OUTERFECRATE                     = 5,
  122. DISPID_TUNER_L_MOD                              = 6,
  123. DISPID_TUNER_L_SYMRATE                          = 7,
  124. DISPID_TUNER_L_CLONE                            = 8,
  125.  
  126. // DISPID for IATSCLocator interface
  127. DISPID_TUNER_L_ATSC_PHYS_CHANNEL                = 201,
  128. DISPID_TUNER_L_ATSC_TSID                        = 202,
  129.  
  130. // DISPID for IDVBTLocator interface
  131. DISPID_TUNER_L_DVBT_BANDWIDTH                   = 301,
  132. DISPID_TUNER_L_DVBT_LPINNERFECMETHOD            = 302,
  133. DISPID_TUNER_L_DVBT_LPINNERFECRATE              = 303,
  134. DISPID_TUNER_L_DVBT_GUARDINTERVAL               = 304,
  135. DISPID_TUNER_L_DVBT_HALPHA                      = 305,
  136. DISPID_TUNER_L_DVBT_TRANSMISSIONMODE            = 306,
  137. DISPID_TUNER_L_DVBT_INUSE                       = 307,
  138.  
  139. // DISPID for IDVBSLocator interface
  140. DISPID_TUNER_L_DVBS_POLARISATION                = 401,
  141. DISPID_TUNER_L_DVBS_WEST                        = 402,
  142. DISPID_TUNER_L_DVBS_ORBITAL                     = 403,
  143. DISPID_TUNER_L_DVBS_AZIMUTH                     = 404,
  144. DISPID_TUNER_L_DVBS_ELEVATION                   = 405,
  145.  
  146. // DISPID for IDVBCLocator interface
  147.  
  148. // DISPIDs for IComponent interface
  149. DISPID_TUNER_C_TYPE                             = 1,
  150. DISPID_TUNER_C_STATUS                           = 2,
  151. DISPID_TUNER_C_LANGID                           = 3,
  152. DISPID_TUNER_C_DESCRIPTION                      = 4,
  153. DISPID_TUNER_C_CLONE                            = 5,
  154.  
  155. // DISPIDs for IMPEG2Component interface
  156. DISPID_TUNER_C_MP2_PID                           = 101,
  157. DISPID_TUNER_C_MP2_PCRPID                        = 102,
  158. DISPID_TUNER_C_MP2_PROGNO                        = 103,
  159.  
  160. // DISPIDs for IDVBTuningSpace interface
  161. DISPID_TUNER_TS_DVB_SYSTEMTYPE                = 101,
  162. // DISPIDs for IDVBTuningSpace2 interface
  163. DISPID_TUNER_TS_DVB2_NETWORK_ID               = 102,
  164. // DISPIDs for IDVBSTuningSpace interface
  165. DISPID_TUNER_TS_DVBS_LOW_OSC_FREQ             = 1001,
  166. DISPID_TUNER_TS_DVBS_HI_OSC_FREQ              = 1002,
  167. DISPID_TUNER_TS_DVBS_LNB_SWITCH_FREQ          = 1003,
  168. DISPID_TUNER_TS_DVBS_INPUT_RANGE              = 1004,
  169. DISPID_TUNER_TS_DVBS_SPECTRAL_INVERSION       = 1005,
  170.  
  171. // DISPIDs for IAnalogRadioTuningSpace interface
  172. DISPID_TUNER_TS_AR_MINFREQUENCY               = 101,
  173. DISPID_TUNER_TS_AR_MAXFREQUENCY               = 102,
  174. DISPID_TUNER_TS_AR_STEP                       = 103,
  175.  
  176. // DISPIDs for IAnalogTVTuningSpace interface
  177. DISPID_TUNER_TS_ATV_MINCHANNEL                 = 101,
  178. DISPID_TUNER_TS_ATV_MAXCHANNEL                 = 102,
  179. DISPID_TUNER_TS_ATV_INPUTTYPE                  = 103,
  180. DISPID_TUNER_TS_ATV_COUNTRYCODE                = 104,
  181.  
  182. // DISPIDs for IATSCTuningSpace interface
  183. DISPID_TUNER_TS_ATSC_MINMINORCHANNEL           = 201,
  184. DISPID_TUNER_TS_ATSC_MAXMINORCHANNEL           = 202,
  185. DISPID_TUNER_TS_ATSC_MINPHYSCHANNEL            = 203,
  186. DISPID_TUNER_TS_ATSC_MAXPHYSCHANNEL            = 204,
  187.  
  188. // DISPID for IAnalogTVAudioComponent interface
  189. DISPID_CHTUNER_ATVAC_CHANNEL                    = 101,
  190.  
  191. // DISPIDs for IAnalogTVDataComponent interface
  192. DISPID_CHTUNER_ATVDC_SYSTEM                     = 101,
  193. DISPID_CHTUNER_ATVDC_CONTENT                    = 102,
  194.  
  195. // DISPID for IChannelTuneRequest interface
  196. DISPID_CHTUNER_CTR_CHANNEL                      = 101,
  197.  
  198. // DISPID IATSCChannelTuneRequest
  199. DISPID_CHTUNER_ACTR_MINOR_CHANNEL               = 201,
  200.  
  201. // DISPIDs for IDVBComponent interface
  202. DISPID_DVBTUNER_DVBC_ATTRIBUTESVALID            = 101,
  203. DISPID_DVBTUNER_DVBC_PID                        = 102,
  204. DISPID_DVBTUNER_DVBC_TAG                        = 103,
  205. DISPID_DVBTUNER_DVBC_COMPONENTTYPE              = 104,
  206.  
  207. // DISPIDs for IDVBTuneRequest interface
  208. DISPID_DVBTUNER_ONID         = 101,
  209. DISPID_DVBTUNER_TSID         = 102,
  210. DISPID_DVBTUNER_SID          = 103,
  211.  
  212. // DISPIDs for IMPEG2TuneRequest interface
  213. DISPID_MP2TUNER_TSID         = 101,
  214. DISPID_MP2TUNER_PROGNO       = 102,
  215.  
  216. // DISPIDs for IMPEG2TuneRequestFactory interface
  217. DISPID_MP2TUNERFACTORY_CREATETUNEREQUEST        = 1,
  218.  
  219. };
  220.  
  221.  
  222. //////////////////////////////////////////////////////////////////////////////////////
  223. // Tuning Space Container
  224. //////////////////////////////////////////////////////////////////////////////////////
  225. // simple read-only collection of tuning spaces for enumerating subsets of the total
  226. // set of system tuning spaces
  227.     [
  228.         object,
  229.         uuid(901284E4-33FE-4b69-8D63-634A596F3756),
  230.         dual,
  231.         oleautomation,
  232.         nonextensible,
  233.         helpstring("Tuning Space Collection Interface"),
  234.         pointer_default(unique)
  235.     ]
  236.     interface ITuningSpaces : IDispatch
  237.     {
  238.  
  239.         [propget, helpstring("Number of items in the collection")]
  240.         HRESULT Count(
  241.             [out, retval] long *Count
  242.             );
  243.  
  244.         [propget, id(DISPID_NEWENUM), hidden, restricted]
  245.         HRESULT _NewEnum(
  246.             [out, retval] IEnumVARIANT** NewEnum
  247.             );
  248.  
  249.         [id(DISPID_VALUE),
  250.             propget,
  251.             helpstring("Find the Tuning Space with the specified Index")]
  252.         HRESULT Item(
  253.             [in] VARIANT varIndex,
  254.             [out, retval] ITuningSpace** TuningSpace
  255.             );
  256.  
  257.         [propget, hidden, restricted, 
  258.             helpstring("convenience function so C++ apps don't have to unpack VARIANT")]
  259.         HRESULT EnumTuningSpaces(
  260.             [out, retval] IEnumTuningSpaces** NewEnum
  261.             );
  262.  
  263.     }
  264.  
  265. //////////////////////////////////////////////////////////////////////////////////////
  266. // Tuning Space Container
  267. //////////////////////////////////////////////////////////////////////////////////////
  268.     [
  269.         object,
  270.         uuid(5B692E84-E2F1-11d2-9493-00C04F72D980),
  271.         dual,
  272.         oleautomation,
  273.         hidden,
  274.         nonextensible,
  275.         helpstring("Tuning Space Container Interface"),
  276.         pointer_default(unique)
  277.     ]
  278.     interface ITuningSpaceContainer : IDispatch
  279.     {
  280.  
  281.         [propget, helpstring("Number of items in the collection")]
  282.         HRESULT Count(
  283.             [out, retval] long *Count
  284.             );
  285.  
  286.         [propget, id(DISPID_NEWENUM), hidden, restricted]
  287.         HRESULT _NewEnum(
  288.             [out, retval] IEnumVARIANT** NewEnum
  289.             );
  290.  
  291.         [id(DISPID_VALUE),
  292.             propget,
  293.             helpstring("Find the Tuning Space with the specified Index")]
  294.         HRESULT Item(
  295.             [in] VARIANT varIndex,
  296.             [out, retval] ITuningSpace** TuningSpace
  297.             );
  298.         [id(DISPID_VALUE),
  299.             propput,
  300.             helpstring("Change the Tuning Space with the specified Index")]
  301.         HRESULT Item([in] VARIANT varIndex, [in] ITuningSpace *TuningSpace);
  302.  
  303.         [helpstring("Returns the collection of Tuning Spaces with the same implementation")]
  304.         HRESULT TuningSpacesForCLSID(
  305.             [in] BSTR SpaceCLSID,
  306.             [out, retval] ITuningSpaces** NewColl
  307.             );
  308.  
  309.         [hidden, restricted, 
  310.             helpstring("Convenience Function for enumerating from C")]
  311.         HRESULT _TuningSpacesForCLSID(
  312.             [in] REFCLSID SpaceCLSID,
  313.             [out, retval] ITuningSpaces** NewColl
  314.             );
  315.  
  316.         [helpstring("Returns the collection of Tuning Spaces matching the name")]
  317.         HRESULT TuningSpacesForName(
  318.             [in] BSTR Name,
  319.             [out, retval] ITuningSpaces** NewColl
  320.             );
  321.  
  322.         [helpstring("Find Local ID Number of the specified Tuning Space")]
  323.         HRESULT FindID(
  324.             [in] ITuningSpace *TuningSpace,
  325.             [out, retval] long *ID
  326.             );
  327.  
  328.  
  329.         [id(DISPID_ADDITEM), 
  330.          helpstring("Add a new Tuning Space to the collection.  This tuning space will be persisted unless removed")]
  331.         HRESULT Add(
  332.             [in] ITuningSpace* TuningSpace,
  333.             [out, retval] VARIANT* NewIndex
  334.             );
  335.  
  336.         [propget, hidden, restricted, helpstring("Convenience Function for enumerating collection from C")]
  337.         HRESULT EnumTuningSpaces(
  338.             [out, retval] IEnumTuningSpaces **ppEnum
  339.             );
  340.  
  341.         [id(DISPID_REMOVEITEM), 
  342.          helpstring("Remove a Tuning Space from the collection.  this tuning space will be deleted from the registry")]
  343.         HRESULT Remove(
  344.             [in] VARIANT Index
  345.             );
  346.  
  347.         [propget, helpstring("Maximum number of items allowed in the collection")]
  348.         HRESULT MaxCount(
  349.             [out, retval] long *MaxCount
  350.             );
  351.  
  352.         // we don't allow script to set this, but we do allow c code to change it.
  353.         [propput, hidden, restricted, helpstring("Maximum number of items allowed in the collection")]
  354.         HRESULT MaxCount(
  355.             [in] long MaxCount
  356.             );
  357.  
  358.     }
  359.  
  360. //////////////////////////////////////////////////////////////////////////////////////
  361. // Tuning Space Interfaces
  362. //////////////////////////////////////////////////////////////////////////////////////
  363.  
  364. // note: the network type is the clsid of the tuning space implementation
  365.     [
  366.         object,
  367.         uuid(061C6E30-E622-11d2-9493-00C04F72D980),
  368.         dual,
  369.         oleautomation,
  370.         nonextensible,
  371.         helpstring("Tuning Space Interface"),
  372.         pointer_default(unique)
  373.     ]
  374.     interface ITuningSpace : IDispatch
  375.     {
  376.         [propget, id(DISPID_TUNER_TS_UNIQUENAME),
  377.              helpstring("Unique name of the Tuning Space")]
  378.         HRESULT UniqueName(
  379.             [out, retval] BSTR *Name
  380.             );
  381.  
  382.         [propput, id(DISPID_TUNER_TS_UNIQUENAME),
  383.              helpstring("Unique name of the Tuning Space")]
  384.         HRESULT UniqueName(
  385.             [in] BSTR Name
  386.             );
  387.  
  388.         [propget, id(DISPID_TUNER_TS_FRIENDLYNAME),
  389.              helpstring("User-friendly name of the Tuning Space")]
  390.         HRESULT FriendlyName(
  391.             [out, retval] BSTR *Name
  392.             );
  393.  
  394.         [propput, id(DISPID_TUNER_TS_FRIENDLYNAME),
  395.              helpstring("User-friendly name of the Tuning Space")]
  396.         HRESULT FriendlyName(
  397.             [in] BSTR Name
  398.             );
  399.  
  400.         [propget, id(DISPID_TUNER_TS_CLSID), 
  401.             helpstring("Returns the clsid of the tuning space implementation.  provides script access to IPersist:GetClassID")]
  402.         HRESULT CLSID(
  403.             [out, retval] BSTR* SpaceCLSID
  404.             );
  405.  
  406.         [propget, id(DISPID_TUNER_TS_NETWORKTYPE),
  407.              helpstring("Network Type (Network Proivder CLSID)")]
  408.         HRESULT NetworkType(
  409.             [out, retval] BSTR *NetworkTypeGuid
  410.             );
  411.         [propput, id(DISPID_TUNER_TS_NETWORKTYPE),
  412.              helpstring("Network Type (Network Proivder CLSID)")]
  413.         HRESULT NetworkType(
  414.             [in] BSTR NetworkTypeGuid
  415.             );
  416.  
  417.         [propget, id(DISPID_TUNER_TS__NETWORKTYPE),
  418.              helpstring("Network Type (Network Proivder CLSID)"), hidden, restricted]
  419.         HRESULT _NetworkType(
  420.             [out, retval] GUID* NetworkTypeGuid
  421.             );
  422.         [propput, id(DISPID_TUNER_TS__NETWORKTYPE),
  423.              helpstring("Network Type (Network Proivder CLSID)"), hidden, restricted]
  424.         HRESULT _NetworkType(
  425.             [in] REFCLSID NetworkTypeGuid
  426.             );
  427.  
  428.         // this method creates the "best" kind of tune request for this tuning space.
  429.         // the tuning space may support other kinds of tune requests created via 
  430.         // other factory mechanisms(for example, see mpeg2tunerequestfactory).  but, 
  431.         // this method is the preferred way to get a tune request as it always returns
  432.         // the optimal type of tune request for this space.
  433.         [id(DISPID_TUNER_TS_CREATETUNEREQUEST),
  434.             helpstring("Create a Tune Request object")]
  435.         HRESULT CreateTuneRequest(
  436.             [out, retval] ITuneRequest **TuneRequest
  437.             );
  438.  
  439.         [id(DISPID_TUNER_TS_ENUMCATEGORYGUIDS), hidden, restricted]
  440.         HRESULT EnumCategoryGUIDs(
  441.             [out, retval] IEnumGUID **ppEnum
  442.             );
  443.  
  444.         [id(DISPID_TUNER_TS_ENUMDEVICEMONIKERS), hidden, restricted]
  445.         HRESULT EnumDeviceMonikers(
  446.             [out, retval] IEnumMoniker **ppEnum
  447.             );
  448.  
  449.         [propget, id(DISPID_TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES)]
  450.         HRESULT DefaultPreferredComponentTypes(
  451.             [out, retval] IComponentTypes** ComponentTypes
  452.             );
  453.         [propput, id(DISPID_TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES)]
  454.         HRESULT DefaultPreferredComponentTypes(
  455.             [in] IComponentTypes* NewComponentTypes
  456.             );
  457.  
  458.         // the following property is for the network providers to store frequency/channel maps, frequency/transponder maps
  459.         // or whatever other mapping from carrier frequencies to frequency identifiers are appropriate for the tuning space
  460.         // in question.  the bstr is treated as a binary blob.  it is expected to contain embedded nulls,  and it may be formatted
  461.         // internally in whatever fashion the network provider sees fit.
  462.         [propget, id(DISPID_TUNER_TS_FREQMAP)]
  463.         HRESULT FrequencyMapping([out, retval] BSTR *pMapping);
  464.         [propput, id(DISPID_TUNER_TS_FREQMAP)]
  465.         HRESULT FrequencyMapping(BSTR Mapping);
  466.  
  467.         // the following property provides a starting point for the initial IScanningTuner after installation
  468.         [propget, id(DISPID_TUNER_TS_DEFLOCATOR)]
  469.         HRESULT DefaultLocator([out, retval] ILocator **LocatorVal);
  470.         [propput, id(DISPID_TUNER_TS_DEFLOCATOR)]
  471.         HRESULT DefaultLocator([in]ILocator *LocatorVal);
  472.  
  473.         HRESULT Clone([out, retval] ITuningSpace **NewTS);
  474.     }
  475.  
  476. //////////////////////////////////////////////////////////////////////////////////////
  477.     [
  478.         hidden,
  479.         restricted,
  480.         object,
  481.         uuid(8B8EB248-FC2B-11d2-9D8C-00C04F72D980),
  482.         pointer_default(unique)
  483.     ]
  484.     interface IEnumTuningSpaces : IUnknown
  485.     {
  486.         HRESULT Next(
  487.             [in] ULONG celt,
  488.             [out, size_is(celt), length_is(*pceltFetched)]
  489.                 ITuningSpace** rgelt,
  490.             [out] ULONG* pceltFetched
  491.             );
  492.  
  493.         HRESULT Skip(
  494.             [in] ULONG celt
  495.             );
  496.  
  497.         HRESULT Reset(void);
  498.  
  499.         HRESULT Clone(
  500.             [out] IEnumTuningSpaces** ppEnum
  501.             );
  502.     }
  503.  
  504. //////////////////////////////////////////////////////////////////////////////////////
  505.     [
  506.         object,
  507.         hidden,
  508.         dual,
  509.         oleautomation,
  510.         nonextensible,
  511.         uuid(ADA0B268-3B19-4e5b-ACC4-49F852BE13BA),
  512.         pointer_default(unique)
  513.     ]
  514.     interface IDVBTuningSpace : ITuningSpace
  515.     {
  516.         [propget, id(DISPID_TUNER_TS_DVB_SYSTEMTYPE),
  517.          helpstring("Type of DVB System")
  518.         ]
  519.         HRESULT SystemType(
  520.             [out, retval] DVBSystemType *SysType
  521.             );
  522.         [propput, id(DISPID_TUNER_TS_DVB_SYSTEMTYPE),
  523.          helpstring("Type of DVB System")
  524.         ]
  525.         HRESULT SystemType(
  526.             [in] DVBSystemType SysType
  527.             );
  528.  
  529.     }
  530.  
  531. //////////////////////////////////////////////////////////////////////////////////////
  532.     [
  533.         object,
  534.         hidden,
  535.         dual,
  536.         oleautomation,
  537.         nonextensible,
  538.         uuid(843188B4-CE62-43db-966B-8145A094E040),
  539.         pointer_default(unique)
  540.     ]
  541.     interface IDVBTuningSpace2 : IDVBTuningSpace
  542.     {
  543.         [propget, id(DISPID_TUNER_TS_DVB2_NETWORK_ID),
  544.          helpstring("Network ID of DVB System")
  545.         ]
  546.         HRESULT NetworkID(
  547.             [out, retval] long *NetworkID
  548.             );
  549.         [propput, id(DISPID_TUNER_TS_DVB2_NETWORK_ID),
  550.          helpstring("Network ID of DVB System")
  551.         ]
  552.         HRESULT NetworkID(
  553.             [in] long NetworkID
  554.             );
  555.  
  556.     }
  557.  
  558. //////////////////////////////////////////////////////////////////////////////////////
  559.     [
  560.         object,
  561.         hidden,
  562.         dual,
  563.         oleautomation,
  564.         nonextensible,
  565.         uuid(CDF7BE60-D954-42fd-A972-78971958E470),
  566.         pointer_default(unique)
  567.     ]
  568.     interface IDVBSTuningSpace : IDVBTuningSpace2
  569.     {
  570.  
  571.         [propget, id(DISPID_TUNER_TS_DVBS_LOW_OSC_FREQ),
  572.          helpstring("Low Oscillator Frequency of DVB System in KHZ units")
  573.         ]
  574.         HRESULT LowOscillator(
  575.             [out, retval] long *LowOscillator
  576.             );
  577.         [propput, id(DISPID_TUNER_TS_DVBS_LOW_OSC_FREQ),
  578.          helpstring("Low Oscillator Frequency of DVB System in KHZ units")
  579.         ]
  580.         HRESULT LowOscillator(
  581.             [in] long LowOscillator
  582.             );
  583.         [propget, id(DISPID_TUNER_TS_DVBS_HI_OSC_FREQ),
  584.          helpstring("High Oscillator Frequency of DVB System in KHZ units")
  585.         ]
  586.         HRESULT HighOscillator(
  587.             [out, retval] long *HighOscillator
  588.             );
  589.         [propput, id(DISPID_TUNER_TS_DVBS_HI_OSC_FREQ),
  590.          helpstring("High Oscillator Frequency of DVB System in KHZ units")
  591.         ]
  592.         HRESULT HighOscillator(
  593.             [in] long HighOscillator
  594.             );
  595.         [propget, id(DISPID_TUNER_TS_DVBS_LNB_SWITCH_FREQ),
  596.          helpstring("LNB Switch Frequency of DVB System in KHZ units")
  597.         ]
  598.         HRESULT LNBSwitch(
  599.             [out, retval] long *LNBSwitch
  600.             );
  601.         [propput, id(DISPID_TUNER_TS_DVBS_LNB_SWITCH_FREQ),
  602.          helpstring("LNB Switch Frequency of DVB System in KHZ units")
  603.         ]
  604.         HRESULT LNBSwitch(
  605.             [in] long LNBSwitch
  606.             );
  607.         [propget, id(DISPID_TUNER_TS_DVBS_INPUT_RANGE),
  608.          helpstring("Which Option/Switch contains the requested signal source")
  609.         ]
  610.         HRESULT InputRange(
  611.             [out, retval] BSTR *InputRange
  612.             );
  613.         [propput, id(DISPID_TUNER_TS_DVBS_INPUT_RANGE),
  614.          helpstring("Which Option/Switch contains the requested signal source")
  615.         ]
  616.         HRESULT InputRange(
  617.             [in] BSTR InputRange
  618.             );
  619.         [propget, id(DISPID_TUNER_TS_DVBS_SPECTRAL_INVERSION),
  620.          helpstring("Which Option/Switch contains the requested signal source")
  621.         ]
  622.         HRESULT SpectralInversion(
  623.             [out, retval] SpectralInversion *SpectralInversionVal
  624.             );
  625.         [propput, id(DISPID_TUNER_TS_DVBS_SPECTRAL_INVERSION),
  626.          helpstring("Which Option/Switch contains the requested signal source")
  627.         ]
  628.         HRESULT SpectralInversion(
  629.             [in] SpectralInversion SpectralInversionVal
  630.             );
  631.  
  632.  
  633.     }
  634.  
  635.  
  636. //////////////////////////////////////////////////////////////////////////////////////
  637.    [
  638.         object,
  639.         hidden,
  640.         dual,
  641.         oleautomation,
  642.         nonextensible,
  643.         uuid(E48244B8-7E17-4f76-A763-5090FF1E2F30),
  644.         pointer_default(unique)
  645.     ]
  646.     interface IAuxInTuningSpace : ITuningSpace
  647.     {
  648.     }
  649. //////////////////////////////////////////////////////////////////////////////////////
  650.     [
  651.         object,
  652.         hidden,
  653.         dual,
  654.         oleautomation,
  655.         nonextensible,
  656.         uuid(2A6E293C-2595-11d3-B64C-00C04F79498E),
  657.         pointer_default(unique)
  658.     ]
  659.     interface IAnalogTVTuningSpace : ITuningSpace
  660.     {
  661.         [propget, id(DISPID_TUNER_TS_ATV_MINCHANNEL),
  662.          helpstring("Smallest channel number ever provided by this tuning space")
  663.         ]
  664.         HRESULT MinChannel(
  665.             [out, retval] long *MinChannelVal
  666.             );
  667.         [propput, id(DISPID_TUNER_TS_ATV_MINCHANNEL),
  668.          helpstring("Smallest channel number ever provided by this tuning space")
  669.         ]
  670.         HRESULT MinChannel(
  671.             [in] long NewMinChannelVal
  672.             );
  673.         [propget, id(DISPID_TUNER_TS_ATV_MAXCHANNEL),
  674.          helpstring("Largest channel number ever provided by this tuning space")
  675.         ]
  676.         HRESULT MaxChannel(
  677.             [out, retval] long *MaxChannelVal
  678.             );
  679.         [propput, id(DISPID_TUNER_TS_ATV_MAXCHANNEL),
  680.          helpstring("Largest channel number ever provided by this tuning space")
  681.         ]
  682.         HRESULT MaxChannel(
  683.             [in] long NewMaxChannelVal
  684.             );
  685.         [propget, id(DISPID_TUNER_TS_ATV_INPUTTYPE),
  686.          helpstring("Input type for this tuning space")
  687.         ]
  688.         HRESULT InputType([out, retval] TunerInputType *InputTypeVal);
  689.         [propput, id(DISPID_TUNER_TS_ATV_INPUTTYPE),
  690.          helpstring("Input type for this tuning space")
  691.         ]
  692.         HRESULT InputType([in] TunerInputType NewInputTypeVal);
  693.         [propget, id(DISPID_TUNER_TS_ATV_COUNTRYCODE),
  694.          helpstring("International dialing prefix for country of physical broadcast source")
  695.         ]
  696.         HRESULT CountryCode([out, retval] long *CountryCodeVal);
  697.         [propput, id(DISPID_TUNER_TS_ATV_COUNTRYCODE),
  698.          helpstring("International dialing prefix for country of physical broadcast source")
  699.         ]
  700.         HRESULT CountryCode([in] long NewCountryCodeVal);
  701.     }
  702.  
  703. //////////////////////////////////////////////////////////////////////////////////////
  704.     [
  705.         object,
  706.         hidden,
  707.         dual,
  708.         oleautomation,
  709.         nonextensible,
  710.         uuid(0369B4E2-45B6-11d3-B650-00C04F79498E),
  711.         pointer_default(unique)
  712.     ]
  713. // note: we inherit ATSC from analog because we need the same properties.
  714. // - the definition of channel is overloaded to be the major channel,
  715. // - input type allows us to distinguish between broadcast and cable frequencies
  716. // which allows us to use the atsc tuning space class for "open cable".
  717. // - country code will allow us to redefine physical channel frequencies
  718. // if any other countries adopt ATSC which may happen in Latin America in particular.
  719.     interface IATSCTuningSpace : IAnalogTVTuningSpace
  720.     {
  721.         [propget, id(DISPID_TUNER_TS_ATSC_MINMINORCHANNEL),
  722.          helpstring("Smallest minor channel number ever provided by this tuning space")
  723.         ]
  724.         HRESULT MinMinorChannel(
  725.             [out, retval] long *MinMinorChannelVal
  726.             );
  727.         [propput, id(DISPID_TUNER_TS_ATSC_MINMINORCHANNEL),
  728.          helpstring("Smallest minor channel number ever provided by this tuning space")
  729.         ]
  730.         HRESULT MinMinorChannel(
  731.             [in] long NewMinMinorChannelVal
  732.             );
  733.         [propget, id(DISPID_TUNER_TS_ATSC_MAXMINORCHANNEL),
  734.          helpstring("Largest minor channel number ever provided by this tuning space")
  735.         ]
  736.         HRESULT MaxMinorChannel(
  737.             [out, retval] long *MaxMinorChannelVal
  738.             );
  739.         [propput, id(DISPID_TUNER_TS_ATSC_MAXMINORCHANNEL),
  740.          helpstring("Largest minor channel number ever provided by this tuning space")
  741.         ]
  742.         HRESULT MaxMinorChannel(
  743.             [in] long NewMaxMinorChannelVal
  744.             );
  745.         [propget, id(DISPID_TUNER_TS_ATSC_MINPHYSCHANNEL),
  746.          helpstring("Smallest physical channel number ever provided by this tuning space")
  747.         ]
  748.         HRESULT MinPhysicalChannel(
  749.             [out, retval] long *MinPhysicalChannelVal
  750.             );
  751.         [propput, id(DISPID_TUNER_TS_ATSC_MINPHYSCHANNEL),
  752.          helpstring("Smallest physical channel number ever provided by this tuning space")
  753.         ]
  754.         HRESULT MinPhysicalChannel(
  755.             [in] long NewMinPhysicalChannelVal
  756.             );
  757.         [propget, id(DISPID_TUNER_TS_ATSC_MAXPHYSCHANNEL),
  758.          helpstring("Largest physical channel number ever provided by this tuning space")
  759.         ]
  760.         HRESULT MaxPhysicalChannel(
  761.             [out, retval] long *MaxPhysicalChannelVal
  762.             );
  763.         [propput, id(DISPID_TUNER_TS_ATSC_MAXPHYSCHANNEL),
  764.          helpstring("Largest physical channel number ever provided by this tuning space")
  765.         ]
  766.         HRESULT MaxPhysicalChannel(
  767.             [in] long NewMaxPhysicalChannelVal
  768.             );
  769.  
  770.     }
  771.  
  772. //////////////////////////////////////////////////////////////////////////////////////
  773.     [
  774.         object,
  775.         hidden,
  776.         dual,
  777.         oleautomation,
  778.         nonextensible,
  779.         uuid(2A6E293B-2595-11d3-B64C-00C04F79498E),
  780.         pointer_default(unique)
  781.     ]
  782.     interface IAnalogRadioTuningSpace : ITuningSpace {
  783.         [propget, id(DISPID_TUNER_TS_AR_MINFREQUENCY),
  784.          helpstring("Smallest frequency(KHz) ever used by this tuning space")
  785.         ]
  786.         HRESULT MinFrequency(
  787.             [out, retval] long *MinFrequencyVal
  788.             );
  789.         [propput, id(DISPID_TUNER_TS_AR_MINFREQUENCY),
  790.          helpstring("Smallest frequency(KHz) ever used by this tuning space")
  791.         ]
  792.         HRESULT MinFrequency(
  793.             [in] long NewMinFrequencyVal
  794.             );
  795.         [propget, id(DISPID_TUNER_TS_AR_MAXFREQUENCY),
  796.          helpstring("Largest frequency(KHz) ever used by this tuning space")
  797.         ]
  798.         HRESULT MaxFrequency(
  799.             [out, retval] long *MaxFrequencyVal
  800.             );
  801.         [propput, id(DISPID_TUNER_TS_AR_MAXFREQUENCY),
  802.          helpstring("Largest frequency(KHz) ever used by this tuning space")
  803.         ]
  804.         HRESULT MaxFrequency(
  805.             [in] long NewMaxFrequencyVal
  806.             );
  807.         [propget, id(DISPID_TUNER_TS_AR_STEP),
  808.          helpstring("Default step value(KHz) to next frequency for this tuning space")
  809.         ]
  810.         HRESULT Step(
  811.             [out, retval] long *StepVal
  812.             );
  813.         [propput, id(DISPID_TUNER_TS_AR_STEP),
  814.          helpstring("Default step value(KHz) to next frequency for this tuning space")
  815.         ]
  816.         HRESULT Step(
  817.             [in] long NewStepVal
  818.             );      
  819.     }
  820.  
  821.  
  822. //////////////////////////////////////////////////////////////////////////////////////
  823. // Tune Request Interfaces
  824. //////////////////////////////////////////////////////////////////////////////////////
  825. // tune requests(of any kind) can only be obtained from tune request factories such as 
  826. // ITuningSpace::CreateTuneRequest.  one reason for this is that we always want to be 
  827. // certain that a tune request is bound to the right tuning space.  this means we don't 
  828. // have to perform consistency checks all over the place.
  829.     [
  830.         object,
  831.         nonextensible,
  832.         uuid(07DDC146-FC3D-11d2-9D8C-00C04F72D980),
  833.         dual,
  834.         oleautomation,
  835.         helpstring("Tune Request Interface"),
  836.         pointer_default(unique)
  837.     ]
  838.     interface ITuneRequest : IDispatch
  839.     {
  840.         [propget, id(DISPID_TUNER_TR_TUNINGSPACE),
  841.             helpstring("Tuning Space object")]
  842.         HRESULT TuningSpace(
  843.             [out, retval] ITuningSpace **TuningSpace
  844.             );
  845.         [propget, id(DISPID_TUNER_TR_COMPONENTS),
  846.             helpstring("Components collection")]
  847.         HRESULT Components(
  848.             [out, retval] IComponents **Components
  849.             );
  850.         [id(DISPID_TUNER_TR_CLONE),
  851.             helpstring("Create a new copy of this tune request")]
  852.         HRESULT Clone(
  853.             [out, retval] ITuneRequest **NewTuneRequest
  854.             );
  855.         [propget, id(DISPID_TUNER_TR_LOCATOR),
  856.             helpstring("Locator Object")]
  857.         HRESULT Locator(
  858.             [out, retval] ILocator **Locator
  859.             );
  860.         [propput, id(DISPID_TUNER_TR_LOCATOR),
  861.             helpstring("Locator Object")]
  862.         HRESULT Locator(
  863.             [in] ILocator *Locator
  864.             );
  865.     }
  866.  
  867. //////////////////////////////////////////////////////////////////////////////////////
  868.     [
  869.         object,
  870.         nonextensible,
  871.         uuid(0369B4E0-45B6-11d3-B650-00C04F79498E),
  872.         dual,
  873.         oleautomation,
  874.         helpstring("Channel Tune Request Interface"),
  875.         pointer_default(unique)
  876.     ]
  877.     interface IChannelTuneRequest : ITuneRequest
  878.     {
  879.         [propget, id(DISPID_CHTUNER_CTR_CHANNEL),
  880.             helpstring("Channel")]
  881.         HRESULT Channel(
  882.             [out, retval] long *Channel
  883.             );
  884.         [propput, id(DISPID_CHTUNER_CTR_CHANNEL),
  885.             helpstring("Channel")]
  886.         HRESULT Channel(
  887.             [in] long Channel
  888.             );
  889.     }
  890.  
  891. //////////////////////////////////////////////////////////////////////////////////////
  892.     [
  893.         object,
  894.         nonextensible,
  895.         uuid(0369B4E1-45B6-11d3-B650-00C04F79498E),
  896.         dual,
  897.         oleautomation,
  898.         helpstring("ATSC Channel Tune Request Interface"),
  899.         pointer_default(unique)
  900.     ]
  901.     interface IATSCChannelTuneRequest : IChannelTuneRequest
  902.     {
  903.         [propget, id(DISPID_CHTUNER_ACTR_MINOR_CHANNEL),
  904.             helpstring("Minor Channel")]
  905.         HRESULT MinorChannel(
  906.             [out, retval] long *MinorChannel
  907.             );
  908.         [propput, id(DISPID_CHTUNER_ACTR_MINOR_CHANNEL),
  909.             helpstring("Minor Channel")]
  910.         HRESULT MinorChannel(
  911.             [in] long MinorChannel
  912.             );
  913.     }
  914.  
  915. //////////////////////////////////////////////////////////////////////////////////////
  916.     [
  917.         object,
  918.         nonextensible,
  919.         uuid(0D6F567E-A636-42bb-83BA-CE4C1704AFA2),
  920.         dual,
  921.         oleautomation,
  922.         helpstring("DVB Tune Request Interface"),
  923.         pointer_default(unique)
  924.     ]
  925.     interface IDVBTuneRequest : ITuneRequest
  926.     {
  927.         [propget, id(DISPID_DVBTUNER_ONID),
  928.             helpstring("Original Network ID")]
  929.         HRESULT ONID(
  930.             [out, retval] long *ONID
  931.             );
  932.         [propput, id(DISPID_DVBTUNER_ONID),
  933.             helpstring("Original Network ID")]
  934.         HRESULT ONID(
  935.             [in] long ONID
  936.             );
  937.         [propget, id(DISPID_DVBTUNER_TSID),
  938.             helpstring("Transport Stream ID")]
  939.         HRESULT TSID(
  940.             [out, retval] long *TSID
  941.             );
  942.         [propput, id(DISPID_DVBTUNER_TSID),
  943.             helpstring("Transport Stream ID")]
  944.         HRESULT TSID(
  945.             [in] long TSID
  946.             );
  947.         [propget, id(DISPID_DVBTUNER_SID),
  948.             helpstring("Service ID")]
  949.         HRESULT SID(
  950.             [out, retval] long *SID
  951.             );
  952.         [propput, id(DISPID_DVBTUNER_SID),
  953.             helpstring("Service ID")]
  954.         HRESULT SID(
  955.             [in] long SID
  956.             );
  957.     }
  958.  
  959. //////////////////////////////////////////////////////////////////////////////////////
  960. /// There are times(for example, reading from a file) when its useful to be able to tune
  961. /// a basic mpeg2 transport stream that contains minimal tables.  this requires the least
  962. /// common denominator mpeg2 xport stream id information
  963. /// the following tune request supplies these properties.  it can typiclly only be obtained from
  964. /// an mpeg2tunerequestfactory object. no known tune request(at this time) will return this
  965. /// from their createtunerequest() method.  in other words, this is not the "best" tune request
  966. /// for any of the current tuning spaces.
  967. //////////////////////////////////////////////////////////////////////////////////////
  968.     [
  969.         object,
  970.         nonextensible,
  971.         uuid(EB7D987F-8A01-42ad-B8AE-574DEEE44D1A),
  972.         dual,
  973.         oleautomation,
  974.         helpstring("MPEG2 Tune Request Interface"),
  975.         pointer_default(unique)
  976.     ]
  977.     interface IMPEG2TuneRequest : ITuneRequest
  978.     {
  979.         [propget, id(DISPID_MP2TUNER_TSID),
  980.             helpstring("Transport Stream ID")]
  981.         HRESULT TSID(
  982.             [out, retval] long *TSID
  983.             );
  984.         [propput, id(DISPID_MP2TUNER_TSID),
  985.             helpstring("Transport Stream ID")]
  986.         HRESULT TSID(
  987.             [in] long TSID
  988.             );
  989.         [propget, id(DISPID_MP2TUNER_PROGNO),
  990.             helpstring("Program Number ID")]
  991.         HRESULT ProgNo(
  992.             [out, retval] long *ProgNo
  993.             );
  994.         [propput, id(DISPID_MP2TUNER_PROGNO),
  995.             helpstring("Program Number ID")]
  996.         HRESULT ProgNo(
  997.             [in] long ProgNo
  998.             );
  999.     }
  1000.  
  1001.     [
  1002.         object,
  1003.         nonextensible,
  1004.         hidden,
  1005.         uuid(14E11ABD-EE37-4893-9EA1-6964DE933E39),
  1006.         dual,
  1007.         oleautomation,
  1008.         helpstring("MPEG2 Tune Request Factory Interface"),
  1009.         pointer_default(unique)
  1010.     ]
  1011.     interface IMPEG2TuneRequestFactory : IDispatch
  1012.     {
  1013.         [id(DISPID_MP2TUNERFACTORY_CREATETUNEREQUEST),
  1014.             helpstring("Create MPEG2 Tune Request for specified tuning space(if possible)")]
  1015.         HRESULT CreateTuneRequest(
  1016.             [in] ITuningSpace *TuningSpace,
  1017.             [out, retval] IMPEG2TuneRequest **TuneRequest
  1018.             );
  1019.     }
  1020.  
  1021.     [
  1022.         object,
  1023.         hidden,
  1024.         restricted,
  1025.         nonextensible,
  1026.         uuid(1B9D5FC3-5BBC-4b6c-BB18-B9D10E3EEEBF),
  1027.         helpstring("MPEG2 Tune Request Supported Interface"),
  1028.         pointer_default(unique)
  1029.     ]
  1030.     interface IMPEG2TuneRequestSupport : IUnknown
  1031.     {
  1032.     }
  1033.  
  1034.  
  1035. //////////////////////////////////////////////////////////////////////////////////////
  1036. // Tuner Interfaces
  1037. //////////////////////////////////////////////////////////////////////////////////////
  1038.     [
  1039.         object,
  1040.         hidden,
  1041.         nonextensible,
  1042.         uuid(28C52640-018A-11d3-9D8E-00C04F72D980),
  1043.         helpstring("Tuner Interface"),
  1044.         pointer_default(unique)
  1045.     ]
  1046.     interface ITuner : IUnknown
  1047.     {
  1048.         [propget, helpstring("Tuning Space object")]
  1049.         HRESULT TuningSpace(
  1050.             [out, retval] ITuningSpace **TuningSpace
  1051.             );
  1052.  
  1053.         [propput, helpstring("Tuning Space object")]
  1054.         HRESULT TuningSpace(
  1055.             [in] ITuningSpace *TuningSpace
  1056.             );
  1057.  
  1058.         [hidden, restricted, helpstring("Returns an enumerator for Tuning Spaces accepted by this tuner")]
  1059.         HRESULT EnumTuningSpaces(
  1060.             [out, retval] IEnumTuningSpaces **ppEnum
  1061.             );
  1062.  
  1063.         [propget, helpstring("Tune Request object")]
  1064.         HRESULT TuneRequest(
  1065.             [out, retval] ITuneRequest **TuneRequest
  1066.             );
  1067.  
  1068.         [propput, helpstring("Tune Request object")]
  1069.         HRESULT TuneRequest(
  1070.             [in] ITuneRequest *TuneRequest
  1071.             );
  1072.  
  1073.         [helpstring("Validate the tuning request without tuning")]
  1074.         HRESULT Validate(
  1075.             [in] ITuneRequest *TuneRequest
  1076.             );
  1077.  
  1078.         [propget, helpstring("Preferred Component Types collection")]
  1079.         HRESULT PreferredComponentTypes(
  1080.             [out, retval] IComponentTypes **ComponentTypes
  1081.             );
  1082.  
  1083.         [propput, helpstring("Preferred Component Types collection")]
  1084.         HRESULT PreferredComponentTypes(
  1085.             [in] IComponentTypes *ComponentTypes
  1086.             );
  1087.  
  1088.         [propget, helpstring("Signal Strength")]
  1089.         HRESULT SignalStrength(
  1090.             [out, retval] long *Strength
  1091.             );
  1092.  
  1093.         [helpstring("Trigger Signal events (interval in milliseconds; 0 turns off trigger)")]
  1094.         HRESULT TriggerSignalEvents(
  1095.             [in] long Interval
  1096.             );
  1097.     }
  1098.  
  1099. //////////////////////////////////////////////////////////////////////////////////////
  1100.     [
  1101.         object,
  1102.         hidden,
  1103.         nonextensible,
  1104.         uuid(1DFD0A5C-0284-11d3-9D8E-00C04F72D980),
  1105.         helpstring("Scanning Tuner Interface"),
  1106.         pointer_default(unique)
  1107.     ]
  1108.     interface IScanningTuner : ITuner
  1109.     {
  1110.         [helpstring("Seek to the next valid selection")]
  1111.         HRESULT SeekUp(
  1112.             );
  1113.  
  1114.         [helpstring("Seek to the previous valid selection")]
  1115.         HRESULT SeekDown(
  1116.             );
  1117.  
  1118.         [helpstring("Scan for valid selections upward")]
  1119.         HRESULT ScanUp(
  1120.             [in] long MillisecondsPause
  1121.             );
  1122.  
  1123.         [helpstring("Scan for valid selections downward")]
  1124.         HRESULT ScanDown(
  1125.             [in] long MillisecondsPause
  1126.             );
  1127.  
  1128.         [helpstring("Enter the device's autoprogram mode")]
  1129.         HRESULT AutoProgram(
  1130.             );
  1131.     };
  1132.  
  1133. //////////////////////////////////////////////////////////////////////////////////////
  1134. // Component Type Interfaces
  1135. //////////////////////////////////////////////////////////////////////////////////////
  1136.  
  1137.     // Component Category
  1138.  
  1139.     [
  1140.         object,
  1141.         hidden,
  1142.         nonextensible,
  1143.         uuid(6A340DC0-0311-11d3-9D8E-00C04F72D980),
  1144.         dual,
  1145.         oleautomation,
  1146.         helpstring("Component Type Interface"),
  1147.         pointer_default(unique)
  1148.     ]
  1149.     interface IComponentType : IDispatch
  1150.     {
  1151.         [propget, id(DISPID_TUNER_CT_CATEGORY),
  1152.             helpstring("General category of component")]
  1153.         HRESULT Category(
  1154.             [out, retval] ComponentCategory *Category
  1155.             );
  1156.         [propput, id(DISPID_TUNER_CT_CATEGORY),
  1157.             helpstring("General category of component")]
  1158.         HRESULT Category(
  1159.             [in] ComponentCategory Category
  1160.             );
  1161.  
  1162.         [propget, id(DISPID_TUNER_CT_MEDIAMAJORTYPE),
  1163.             helpstring("DirectShow MediaType Major Type Guid")]
  1164.         HRESULT MediaMajorType(
  1165.             [out, retval] BSTR *MediaMajorType
  1166.             );    
  1167.         [propput, id(DISPID_TUNER_CT_MEDIAMAJORTYPE),
  1168.             helpstring("DirectShow MediaType Major Type Guid")]
  1169.         HRESULT MediaMajorType(
  1170.             [in] BSTR MediaMajorType
  1171.             );
  1172.         [propget, id(DISPID_TUNER_CT__MEDIAMAJORTYPE),
  1173.             helpstring("DirectShow MediaType Major Type Guid"), hidden, restricted]
  1174.         HRESULT _MediaMajorType(
  1175.             [out, retval] GUID* MediaMajorTypeGuid
  1176.             );
  1177.         [propput, id(DISPID_TUNER_CT__MEDIAMAJORTYPE),
  1178.             helpstring("DirectShow MediaType Major Type Guid"), hidden, restricted]
  1179.         HRESULT _MediaMajorType(
  1180.             [in] REFCLSID MediaMajorTypeGuid
  1181.             );
  1182.         [propget, id(DISPID_TUNER_CT_MEDIASUBTYPE),
  1183.             helpstring("DirectShow MediaType Sub Type Guid")]
  1184.         HRESULT MediaSubType(
  1185.             [out, retval] BSTR *MediaSubType
  1186.             );
  1187.         [propput, id(DISPID_TUNER_CT_MEDIASUBTYPE),
  1188.             helpstring("DirectShow MediaType Sub Type Guid")]
  1189.         HRESULT MediaSubType(
  1190.             [in] BSTR MediaSubType
  1191.             );
  1192.         [propget, id(DISPID_TUNER_CT__MEDIASUBTYPE),
  1193.             helpstring("DirectShow MediaType Sub Type Guid"), hidden, restricted]
  1194.         HRESULT _MediaSubType(
  1195.             [out, retval] GUID* MediaSubTypeGuid
  1196.             );
  1197.         [propput, id(DISPID_TUNER_CT__MEDIASUBTYPE),
  1198.             helpstring("DirectShow MediaType Sub Type Guid"), hidden, restricted]
  1199.         HRESULT _MediaSubType(
  1200.             [in] REFCLSID MediaSubTypeGuid
  1201.             );
  1202.         [propget, id(DISPID_TUNER_CT_MEDIAFORMATTYPE),
  1203.             helpstring("DirectShow MediaType Format Guid")]
  1204.         HRESULT MediaFormatType(
  1205.             [out, retval] BSTR *MediaFormatType
  1206.             );
  1207.         [propput, id(DISPID_TUNER_CT_MEDIAFORMATTYPE),
  1208.             helpstring("DirectShow MediaType Format Guid")]
  1209.         HRESULT MediaFormatType(
  1210.             [in] BSTR MediaFormatType
  1211.             );
  1212.         [propget, id(DISPID_TUNER_CT__MEDIAFORMATTYPE),
  1213.             helpstring("DirectShow MediaType Format Guid"), hidden, restricted]
  1214.         HRESULT _MediaFormatType(
  1215.             [out, retval] GUID* MediaFormatTypeGuid
  1216.             );
  1217.         [propput, id(DISPID_TUNER_CT__MEDIAFORMATTYPE),
  1218.             helpstring("DirectShow MediaType Format Guid"), hidden, restricted]
  1219.         HRESULT _MediaFormatType(
  1220.             [in] REFCLSID MediaFormatTypeGuid
  1221.             );
  1222.  
  1223.         [propget, id(DISPID_TUNER_CT_MEDIATYPE), hidden, restricted,
  1224.             helpstring("DirectShow MediaType Guid, this only retrieves major, sub, format guids not the entire struct")]
  1225.         HRESULT MediaType(
  1226.             [out, retval] AM_MEDIA_TYPE *MediaType
  1227.             );
  1228.         [propput, id(DISPID_TUNER_CT_MEDIATYPE), hidden, restricted,
  1229.             helpstring("DirectShow MediaType Guid, this only retrieves major, sub, format guids not the entire struct")]
  1230.         HRESULT MediaType(
  1231.             [in] AM_MEDIA_TYPE *MediaType
  1232.             );
  1233.  
  1234.         [id(DISPID_TUNER_CT_CLONE),
  1235.             helpstring("Create a copy of this component type")]
  1236.         HRESULT Clone(
  1237.             [out, retval] IComponentType **NewCT
  1238.             );
  1239.     };
  1240.  
  1241. //////////////////////////////////////////////////////////////////////////////////////
  1242.     [
  1243.         object,
  1244.         hidden,
  1245.         nonextensible,
  1246.         uuid(B874C8BA-0FA2-11d3-9D8E-00C04F72D980),
  1247.         dual,
  1248.         oleautomation,
  1249.         helpstring("Language Component Type Interface"),
  1250.         pointer_default(unique)
  1251.     ]
  1252.     interface ILanguageComponentType : IComponentType
  1253.     {
  1254.         [propget, id(DISPID_TUNER_LCT_LANGID),
  1255.             helpstring("Language Identifier for Substream Content Language")]
  1256.         HRESULT LangID(
  1257.             [out, retval] long *LangID
  1258.             );
  1259.  
  1260.         [propput, id(DISPID_TUNER_LCT_LANGID),
  1261.             helpstring("Language Identifier for Substream Content Language")]
  1262.         HRESULT LangID(
  1263.             [in] long LangID
  1264.             );
  1265.     };
  1266.  
  1267. //////////////////////////////////////////////////////////////////////////////////////
  1268.     [
  1269.         object,
  1270.         hidden,
  1271.         nonextensible,
  1272.         uuid(2C073D84-B51C-48c9-AA9F-68971E1F6E38),
  1273.         dual,
  1274.         oleautomation,
  1275.         helpstring("MPEG2 Component Type Interface"),
  1276.         pointer_default(unique)
  1277.     ]
  1278.     interface IMPEG2ComponentType : ILanguageComponentType
  1279.     {
  1280.         [propget, id(DISPID_TUNER_MP2CT_TYPE),
  1281.             helpstring("MPEG2 Stream Type")]
  1282.         HRESULT StreamType(
  1283.             [out, retval] MPEG2StreamType *MP2StreamType
  1284.             );
  1285.  
  1286.         [propput, id(DISPID_TUNER_MP2CT_TYPE),
  1287.             helpstring("MPEG2 Stream Type")]
  1288.         HRESULT StreamType(
  1289.             [in] MPEG2StreamType MP2StreamType
  1290.             );
  1291.     };
  1292.  
  1293. //////////////////////////////////////////////////////////////////////////////////////
  1294.  
  1295.     [
  1296.         object,
  1297.         hidden,
  1298.         nonextensible,
  1299.         uuid(FC189E4D-7BD4-4125-B3B3-3A76A332CC96),
  1300.         dual,
  1301.         oleautomation,
  1302.         helpstring("ATSC Component Type Interface"),
  1303.         pointer_default(unique)
  1304.     ]
  1305.     interface IATSCComponentType : IMPEG2ComponentType
  1306.     {
  1307.         [propget, id(DISPID_TUNER_ATSCCT_FLAGS),
  1308.             helpstring("ATSC Component Type Flags")]
  1309.         HRESULT Flags(
  1310.             [out, retval] long *Flags
  1311.             );
  1312.  
  1313.         [propput, id(DISPID_TUNER_ATSCCT_FLAGS),
  1314.             helpstring("ATSC Component Type Flags")]
  1315.         HRESULT Flags(
  1316.             [in] long flags
  1317.             );
  1318.     };
  1319.  
  1320. //////////////////////////////////////////////////////////////////////////////////////
  1321.     [
  1322.         hidden, restricted,
  1323.         object,
  1324.         uuid(8A674B4A-1F63-11d3-B64C-00C04F79498E),
  1325.         pointer_default(unique)
  1326.     ]
  1327.     interface IEnumComponentTypes : IUnknown
  1328.     {
  1329.         HRESULT Next(
  1330.             [in] ULONG celt,
  1331.             [out, size_is(celt), length_is(*pceltFetched)]
  1332.                 IComponentType** rgelt,
  1333.             [out] ULONG* pceltFetched
  1334.             );
  1335.  
  1336.         HRESULT Skip(
  1337.             [in] ULONG celt
  1338.             );
  1339.  
  1340.         HRESULT Reset(void);
  1341.  
  1342.         HRESULT Clone(
  1343.             [out] IEnumComponentTypes** ppEnum
  1344.             );
  1345.     }
  1346.  
  1347.  
  1348. //////////////////////////////////////////////////////////////////////////////////////
  1349. // Component Type Container
  1350. //////////////////////////////////////////////////////////////////////////////////////
  1351.  
  1352.     [
  1353.         object,
  1354.         hidden,
  1355.         nonextensible,
  1356.         uuid(0DC13D4A-0313-11d3-9D8E-00C04F72D980),
  1357.         dual,
  1358.         oleautomation,
  1359.         helpstring("ComponentType Collection Interface"),
  1360.         pointer_default(unique)
  1361.     ]
  1362.     interface IComponentTypes : IDispatch
  1363.     {
  1364.         [propget, helpstring("Number of items in the collection")]
  1365.         HRESULT Count(
  1366.             [out, retval] long *Count
  1367.             );
  1368.  
  1369.         [propget, id(DISPID_NEWENUM), hidden, restricted]
  1370.         HRESULT _NewEnum(
  1371.             [out, retval] IEnumVARIANT **ppNewEnum
  1372.             );
  1373.  
  1374.         [hidden, restricted, helpstring("Convenience Function for Use with C")]
  1375.         HRESULT EnumComponentTypes(
  1376.             [out, retval] IEnumComponentTypes **ppNewEnum
  1377.             );
  1378.  
  1379.         [id(DISPID_VALUE),
  1380.             propget,
  1381.             helpstring("Get the ComponentType at the specified index")]
  1382.         HRESULT Item(
  1383.             [in] VARIANT Index,
  1384.             [out, retval] IComponentType **ComponentType
  1385.             );
  1386.  
  1387.         [id(DISPID_VALUE),
  1388.             propput,
  1389.             helpstring("Get the ComponentType at the specified index")]
  1390.         HRESULT Item(
  1391.             [in] VARIANT Index,
  1392.             [in] IComponentType *ComponentType
  1393.             );
  1394.  
  1395.         [id(DISPID_ADDITEM), 
  1396.          helpstring("Append the ComponentType to the collection")]
  1397.         HRESULT Add(
  1398.             [in] IComponentType *ComponentType,
  1399.             [out, retval] VARIANT *NewIndex
  1400.             );
  1401.  
  1402.         [id(DISPID_REMOVEITEM), 
  1403.          helpstring("Clear the collection")]
  1404.         HRESULT Remove(
  1405.             [in] VARIANT Index
  1406.             );
  1407.  
  1408.         [helpstring("Copy the collection")]
  1409.         HRESULT Clone([out, retval] IComponentTypes **NewList);
  1410.     };
  1411.  
  1412. //////////////////////////////////////////////////////////////////////////////////////
  1413. // Component Interfaces
  1414. //////////////////////////////////////////////////////////////////////////////////////
  1415.  
  1416.     [
  1417.         object,
  1418.         nonextensible,
  1419.         uuid(1A5576FC-0E19-11d3-9D8E-00C04F72D980),
  1420.         dual,
  1421.         oleautomation,
  1422.         helpstring("Component Interface"),
  1423.         pointer_default(unique)
  1424.     ]
  1425.     interface IComponent : IDispatch
  1426.     {
  1427.         [propget, id(DISPID_TUNER_C_TYPE),
  1428.             helpstring("Component Type")]
  1429.         HRESULT Type(
  1430.             [out, retval] IComponentType** CT
  1431.             );
  1432.     
  1433.         // only loaders initialize components
  1434.         [hidden, restricted, propput, id(DISPID_TUNER_C_TYPE),
  1435.             helpstring("Component Type")]
  1436.         HRESULT Type(
  1437.             [in] IComponentType* CT
  1438.             );
  1439.  
  1440.         // NOTE: this langid is *not* the same as the langid
  1441.         // in the componenttype(if the componenttype is a languagecomponenttype)
  1442.         // the langid in the component type is the language of the content this
  1443.         // component is describing.  the following langid in the component is the
  1444.         // language of the descriptive info in the component object.
  1445.         [propget, id(DISPID_TUNER_C_LANGID),
  1446.             helpstring("Language Identifier for Description Language")]
  1447.         HRESULT DescLangID(
  1448.             [out, retval] long *LangID
  1449.             );
  1450.  
  1451.         [propput, id(DISPID_TUNER_C_LANGID),
  1452.             helpstring("Language Identifier for Description Language")]
  1453.         HRESULT DescLangID(
  1454.             [in] long LangID
  1455.             );
  1456.  
  1457.         [propget, id(DISPID_TUNER_C_STATUS),
  1458.             helpstring("Component Status")]
  1459.         HRESULT Status(
  1460.             [out, retval] ComponentStatus *Status
  1461.             );
  1462.  
  1463.         [propput, id(DISPID_TUNER_C_STATUS),
  1464.             helpstring("Component Status")]
  1465.         HRESULT Status(
  1466.             [in] ComponentStatus Status
  1467.             );
  1468.  
  1469.         [propget, id(DISPID_TUNER_C_DESCRIPTION),
  1470.             helpstring("Component Description")]
  1471.         HRESULT Description(
  1472.             [out, retval] BSTR *Description
  1473.             );
  1474.  
  1475.         // restricted: only loaders will initialize components
  1476.         [hidden, restricted, propput, id(DISPID_TUNER_C_DESCRIPTION),
  1477.             helpstring("Component Description")]
  1478.         HRESULT Description(
  1479.             [in] BSTR Description
  1480.             );
  1481.  
  1482.         [id(DISPID_TUNER_C_CLONE),
  1483.             helpstring("Copy Component")]
  1484.         HRESULT Clone(
  1485.             [out, retval] IComponent **NewComponent
  1486.             );
  1487.  
  1488.     };
  1489.  
  1490. //////////////////////////////////////////////////////////////////////////////////////
  1491.     [
  1492.         object,
  1493.         nonextensible,
  1494.         uuid(1493E353-1EB6-473c-802D-8E6B8EC9D2A9),
  1495.         dual,
  1496.         oleautomation,
  1497.         helpstring("MPEG2 Component Interface"),
  1498.         pointer_default(unique)
  1499.     ]
  1500.     interface IMPEG2Component : IComponent
  1501.     {
  1502.         [propget, id(DISPID_TUNER_C_MP2_PID),
  1503.             helpstring("MPEG2 Packet ID for this Substream")]
  1504.         HRESULT PID(
  1505.             [out, retval] long *PID
  1506.             );
  1507.  
  1508.         [propput, id(DISPID_TUNER_C_MP2_PID),
  1509.             helpstring("MPEG2 Packet ID for this Substream")]
  1510.         HRESULT PID(
  1511.             [in] long PID
  1512.             );
  1513.         [propget, id(DISPID_TUNER_C_MP2_PCRPID),
  1514.             helpstring("MPEG2 Packet ID for this Substream's Timestamps")]
  1515.         HRESULT PCRPID(
  1516.             [out, retval] long *PCRPID
  1517.             );
  1518.  
  1519.         [propput, id(DISPID_TUNER_C_MP2_PCRPID),
  1520.             helpstring("MPEG2 Packet ID for this Substream's Timestamps")]
  1521.         HRESULT PCRPID(
  1522.             [in] long PCRPID
  1523.             );
  1524.  
  1525.         // program number provides reverse lookup to PAT
  1526.         [propget, id(DISPID_TUNER_C_MP2_PROGNO),
  1527.             helpstring("MPEG2 Program Number")]
  1528.         HRESULT ProgramNumber(
  1529.             [out, retval] long *ProgramNumber
  1530.             );
  1531.  
  1532.         [propput, id(DISPID_TUNER_C_MP2_PROGNO),
  1533.             helpstring("MPEG2 Program Number")]
  1534.         HRESULT ProgramNumber(
  1535.             [in] long ProgramNumber
  1536.             );
  1537.     };
  1538.  
  1539. //////////////////////////////////////////////////////////////////////////////////////
  1540.     [
  1541.         hidden, restricted,
  1542.         object,
  1543.         uuid(2A6E2939-2595-11d3-B64C-00C04F79498E),
  1544.         pointer_default(unique)
  1545.     ]
  1546.     interface IEnumComponents : IUnknown
  1547.     {
  1548.         HRESULT Next(
  1549.             [in] ULONG celt,
  1550.             [out, size_is(celt), length_is(*pceltFetched)]
  1551.                 IComponent** rgelt,
  1552.             [out] ULONG* pceltFetched
  1553.             );
  1554.  
  1555.         HRESULT Skip(
  1556.             [in] ULONG celt
  1557.             );
  1558.  
  1559.         HRESULT Reset(void);
  1560.  
  1561.         HRESULT Clone(
  1562.             [out] IEnumComponents** ppEnum
  1563.             );
  1564.     }
  1565.  
  1566.  
  1567. //////////////////////////////////////////////////////////////////////////////////////
  1568. // Component Container
  1569. //////////////////////////////////////////////////////////////////////////////////////
  1570.  
  1571.     [
  1572.         object,
  1573.         nonextensible,
  1574.         uuid(FCD01846-0E19-11d3-9D8E-00C04F72D980),
  1575.         dual,
  1576.         oleautomation,
  1577.         helpstring("Component Collection Interface"),
  1578.         pointer_default(unique)
  1579.     ]
  1580.     interface IComponents : IDispatch
  1581.     {
  1582.         [propget, helpstring("Number of items in the collection")]
  1583.         HRESULT Count(
  1584.             [out, retval] long *Count
  1585.             );
  1586.  
  1587.         [propget, id(DISPID_NEWENUM), hidden, restricted]
  1588.         HRESULT _NewEnum(
  1589.             [out, retval] IEnumVARIANT **ppNewEnum
  1590.             );
  1591.  
  1592.         [hidden, restricted, helpstring("Convenience Function for Use with C")]
  1593.         HRESULT EnumComponents(
  1594.             [out, retval] IEnumComponents **ppNewEnum
  1595.             );
  1596.  
  1597.         [id(DISPID_VALUE),
  1598.             propget,
  1599.             helpstring("Get the Component at the specified index")]
  1600.         HRESULT Item(
  1601.             [in] VARIANT Index,
  1602.             [out, retval] IComponent **ppComponent
  1603.             );
  1604.  
  1605.         [id(DISPID_ADDITEM), 
  1606.          helpstring("Add the Component to the collection")]
  1607.         HRESULT Add(
  1608.             [in] IComponent *Component,
  1609.             [out, retval] VARIANT *NewIndex
  1610.             );
  1611.  
  1612.         [id(DISPID_REMOVEITEM), 
  1613.          helpstring("Remove the Component at the specified index")]
  1614.         HRESULT Remove(
  1615.             [in] VARIANT Index
  1616.             );
  1617.  
  1618.         [helpstring("Copy the collection")]
  1619.         HRESULT Clone([out, retval] IComponents **NewList);
  1620.     };
  1621.  
  1622. //////////////////////////////////////////////////////////////////////////////////////
  1623. // Component Container
  1624. //////////////////////////////////////////////////////////////////////////////////////
  1625. // this separates the what(general tune request properties) from the where
  1626.     
  1627.  
  1628.  
  1629.     [
  1630.         object,
  1631.         nonextensible,
  1632.         uuid(286D7F89-760C-4F89-80C4-66841D2507AA),
  1633.         dual,
  1634.         oleautomation,
  1635.         helpstring("Generic Locator Information"),
  1636.         pointer_default(unique)
  1637.     ]
  1638.     interface ILocator : IDispatch
  1639.     {
  1640.  
  1641.         [propget, id(DISPID_TUNER_L_CARRFREQ), helpstring("Carrier Frequency(KHz)")]
  1642.         HRESULT CarrierFrequency(
  1643.             [out, retval] long* Frequency
  1644.             );
  1645.         [propput, id(DISPID_TUNER_L_CARRFREQ), helpstring("Carrier Frequency(KHz)")]
  1646.         HRESULT CarrierFrequency(
  1647.             [in] long Frequency
  1648.             );
  1649.         [propget, id(DISPID_TUNER_L_INNERFECMETHOD), helpstring("Inner Fec Type")]
  1650.         HRESULT InnerFEC(
  1651.             [out, retval] FECMethod* FEC
  1652.             );
  1653.         [propput, id(DISPID_TUNER_L_INNERFECMETHOD), helpstring("Inner Fec Type")]
  1654.         HRESULT InnerFEC(
  1655.             [in] FECMethod FEC
  1656.             );
  1657.         [propget, id(DISPID_TUNER_L_INNERFECRATE), helpstring("Inner Fec Rate")]
  1658.         HRESULT InnerFECRate(
  1659.             [out, retval] BinaryConvolutionCodeRate* FEC
  1660.             );
  1661.         [propput, id(DISPID_TUNER_L_INNERFECRATE), helpstring("Inner Fec Rate")]
  1662.         HRESULT InnerFECRate(
  1663.             [in] BinaryConvolutionCodeRate FEC
  1664.             );
  1665.         [propget, id(DISPID_TUNER_L_OUTERFECMETHOD), helpstring("Outer Fec Type")]
  1666.         HRESULT OuterFEC(
  1667.             [out, retval] FECMethod* FEC
  1668.             );
  1669.         [propput, id(DISPID_TUNER_L_OUTERFECMETHOD), helpstring("Outer Fec Type")]
  1670.         HRESULT OuterFEC(
  1671.             [in] FECMethod FEC
  1672.             );
  1673.         [propget, id(DISPID_TUNER_L_OUTERFECRATE), helpstring("Outer Fec Rate")]
  1674.         HRESULT OuterFECRate(
  1675.             [out, retval] BinaryConvolutionCodeRate* FEC
  1676.             );
  1677.         [propput, id(DISPID_TUNER_L_OUTERFECRATE), helpstring("Outer Fec Rate")]
  1678.         HRESULT OuterFECRate(
  1679.             [in] BinaryConvolutionCodeRate FEC
  1680.             );
  1681.         [propget, id(DISPID_TUNER_L_MOD), helpstring("Modulation Type")]
  1682.         HRESULT Modulation(
  1683.             [out, retval] ModulationType* Modulation
  1684.             );
  1685.         [propput, id(DISPID_TUNER_L_MOD), helpstring("Modulation Type")]
  1686.         HRESULT Modulation(
  1687.             [in] ModulationType Modulation
  1688.             );
  1689.         [propget, id(DISPID_TUNER_L_SYMRATE), helpstring("Modulation Symbol Rate")]
  1690.         HRESULT SymbolRate(
  1691.             [out, retval] long* Rate
  1692.             );
  1693.         [propput, id(DISPID_TUNER_L_SYMRATE), helpstring("Modulation Symbol Rate")]
  1694.         HRESULT SymbolRate(
  1695.             [in] long Rate
  1696.             );
  1697.         [id(DISPID_TUNER_L_CLONE), helpstring("Copy the Locator")]
  1698.         HRESULT Clone([out, retval] ILocator **NewLocator);
  1699.     };
  1700.  
  1701. //////////////////////////////////////////////////////////////////////////////////////
  1702.     [
  1703.         object,
  1704.         hidden,
  1705.         nonextensible,
  1706.         uuid(BF8D986F-8C2B-4131-94D7-4D3D9FCC21EF),
  1707.         dual,
  1708.         oleautomation,
  1709.         helpstring("ATSC Locator Information"),
  1710.         pointer_default(unique)
  1711.     ]
  1712.     interface IATSCLocator : ILocator
  1713.     {
  1714.         [propget, id(DISPID_TUNER_L_ATSC_PHYS_CHANNEL),
  1715.             helpstring("Physical Channel")]
  1716.         HRESULT PhysicalChannel(
  1717.             [out, retval] long *PhysicalChannel
  1718.             );
  1719.         [propput, id(DISPID_TUNER_L_ATSC_PHYS_CHANNEL),
  1720.             helpstring("Physical Channel")]
  1721.         HRESULT PhysicalChannel(
  1722.             [in] long PhysicalChannel
  1723.             );
  1724.         [propget, id(DISPID_TUNER_L_ATSC_TSID),
  1725.             helpstring("Transport Stream ID")]
  1726.         HRESULT TSID(
  1727.             [out, retval] long *TSID
  1728.             );
  1729.         [propput, id(DISPID_TUNER_L_ATSC_TSID),
  1730.             helpstring("Transport Stream ID")]
  1731.         HRESULT TSID(
  1732.             [in] long TSID
  1733.             );
  1734.     };
  1735.  
  1736. //////////////////////////////////////////////////////////////////////////////////////
  1737.  
  1738.     [
  1739.         object,
  1740.         hidden,
  1741.         nonextensible,
  1742.         uuid(8664DA16-DDA2-42ac-926A-C18F9127C302),
  1743.         dual,
  1744.         oleautomation,
  1745.         helpstring("DVB Terrestrial Locator Information"),
  1746.         pointer_default(unique)
  1747.     ]
  1748.     interface IDVBTLocator : ILocator
  1749.     {
  1750.         [propget, id(DISPID_TUNER_L_DVBT_BANDWIDTH), helpstring("Bandwidth")]
  1751.         HRESULT Bandwidth(
  1752.             [out, retval] long* BandWidthVal
  1753.             );
  1754.         [propput, id(DISPID_TUNER_L_DVBT_BANDWIDTH), helpstring("Bandwidth")]
  1755.         HRESULT Bandwidth(
  1756.             [in] long BandwidthVal
  1757.             );
  1758.  
  1759.         [propget, id(DISPID_TUNER_L_DVBT_LPINNERFECMETHOD), helpstring("Inner Fec Type for Low Priority Stream")]
  1760.         HRESULT LPInnerFEC(
  1761.             [out, retval] FECMethod* FEC
  1762.             );
  1763.         [propput, id(DISPID_TUNER_L_DVBT_LPINNERFECMETHOD), helpstring("Inner Fec Type for Low Priority Stream")]
  1764.         HRESULT LPInnerFEC(
  1765.             [in] FECMethod FEC
  1766.             );
  1767.         [propget, id(DISPID_TUNER_L_DVBT_LPINNERFECRATE), helpstring("Inner Fec Rate for Low Priority Stream")]
  1768.         HRESULT LPInnerFECRate(
  1769.             [out, retval] BinaryConvolutionCodeRate* FEC
  1770.             );
  1771.         [propput, id(DISPID_TUNER_L_DVBT_LPINNERFECRATE), helpstring("Inner Fec Rate for Low Priority Stream")]
  1772.         HRESULT LPInnerFECRate(
  1773.             [in] BinaryConvolutionCodeRate FEC
  1774.             );
  1775.         [propget, id(DISPID_TUNER_L_DVBT_HALPHA), helpstring("Hierarchical Alpha")]
  1776.         HRESULT HAlpha(
  1777.             [out, retval] HierarchyAlpha* Alpha
  1778.             );
  1779.         [propput, id(DISPID_TUNER_L_DVBT_HALPHA), helpstring("Hierarchical Alpha")]
  1780.         HRESULT HAlpha(
  1781.             [in] HierarchyAlpha Alpha
  1782.             );
  1783.         [propget, id(DISPID_TUNER_L_DVBT_GUARDINTERVAL), helpstring("Guard Interval")]
  1784.         HRESULT Guard(
  1785.             [out, retval] GuardInterval* GI
  1786.             );
  1787.         [propput, id(DISPID_TUNER_L_DVBT_GUARDINTERVAL), helpstring("Guard Interval")]
  1788.         HRESULT Guard(
  1789.             [in] GuardInterval GI
  1790.             );
  1791.         [propget, id(DISPID_TUNER_L_DVBT_TRANSMISSIONMODE), helpstring("Transmission Mode")]
  1792.         HRESULT Mode(
  1793.             [out, retval] TransmissionMode* mode
  1794.             );
  1795.         [propput, id(DISPID_TUNER_L_DVBT_TRANSMISSIONMODE), helpstring("Transmission Mode")]
  1796.         HRESULT Mode(
  1797.             [in] TransmissionMode mode
  1798.             );
  1799.         [propget, id(DISPID_TUNER_L_DVBT_INUSE), helpstring("Hierarchical Alpha")]
  1800.         HRESULT OtherFrequencyInUse(
  1801.             [out, retval] VARIANT_BOOL* OtherFrequencyInUseVal
  1802.             );
  1803.         [propput, id(DISPID_TUNER_L_DVBT_INUSE), helpstring("Hierarchical Alpha")]
  1804.         HRESULT OtherFrequencyInUse(
  1805.             [in] VARIANT_BOOL OtherFrequencyInUseVal
  1806.             );
  1807.     };
  1808.  
  1809. //////////////////////////////////////////////////////////////////////////////////////
  1810.     [
  1811.         object,
  1812.         hidden,
  1813.         nonextensible,
  1814.         uuid(3D7C353C-0D04-45f1-A742-F97CC1188DC8),
  1815.         dual,
  1816.         oleautomation,
  1817.         helpstring("DVB Satellite Locator Information"),
  1818.         pointer_default(unique)
  1819.     ]
  1820.     interface IDVBSLocator : ILocator
  1821.     {
  1822.  
  1823.         [propget, id(DISPID_TUNER_L_DVBS_POLARISATION), helpstring("Signal Polarisation Type")]
  1824.         HRESULT SignalPolarisation(
  1825.             [out, retval] Polarisation* PolarisationVal
  1826.             );
  1827.         [propput, id(DISPID_TUNER_L_DVBS_POLARISATION), helpstring("Signal Polarisation Type")]
  1828.         HRESULT SignalPolarisation(
  1829.             [in] Polarisation PolarisationVal
  1830.             );
  1831.         [propget, id(DISPID_TUNER_L_DVBS_WEST), helpstring("VARIANT_TRUE means orbital position specifies west longitude")]
  1832.         HRESULT WestPosition(
  1833.             [out, retval] VARIANT_BOOL* WestLongitude
  1834.             );
  1835.         [propput, id(DISPID_TUNER_L_DVBS_WEST), helpstring("VARIANT_TRUE means orbital position specifies west longitude")]
  1836.         HRESULT WestPosition(
  1837.             [in] VARIANT_BOOL WestLongitude
  1838.             );
  1839.         [propget, id(DISPID_TUNER_L_DVBS_ORBITAL), helpstring("Longitude in tenths of a degree")]
  1840.         HRESULT OrbitalPosition(
  1841.             [out, retval] long* longitude
  1842.             );
  1843.         [propput, id(DISPID_TUNER_L_DVBS_ORBITAL), helpstring("Longitude in tenths of a degree")]
  1844.         HRESULT OrbitalPosition(
  1845.             [in] long longitude
  1846.             );
  1847.         [propget, id(DISPID_TUNER_L_DVBS_AZIMUTH), helpstring("Azimuth in tenths of a degree")]
  1848.         HRESULT Azimuth(
  1849.             [out, retval] long* Azimuth
  1850.             );
  1851.         [propput, id(DISPID_TUNER_L_DVBS_AZIMUTH), helpstring("Azimuth in tenths of a degree")]
  1852.         HRESULT Azimuth(
  1853.             [in] long Azimuth
  1854.             );
  1855.         [propget, id(DISPID_TUNER_L_DVBS_ELEVATION), helpstring("Elevation in tenths of a degree")]
  1856.         HRESULT Elevation(
  1857.             [out, retval] long* Elevation
  1858.             );
  1859.         [propput, id(DISPID_TUNER_L_DVBS_ELEVATION), helpstring("Elevation in tenths of a degree")]
  1860.         HRESULT Elevation(
  1861.             [in] long Elevation
  1862.             );
  1863.     };
  1864.  
  1865. //////////////////////////////////////////////////////////////////////////////////////
  1866.     [
  1867.         object,
  1868.         hidden,
  1869.         nonextensible,
  1870.         uuid(6E42F36E-1DD2-43c4-9F78-69D25AE39034),
  1871.         dual,
  1872.         oleautomation,
  1873.         helpstring("DVB Cable Locator Information"),
  1874.         pointer_default(unique)
  1875.     ]
  1876.     interface IDVBCLocator : ILocator
  1877.     {
  1878.     };
  1879.  
  1880. ///////////////////////////////////////////////////////////////////////////////////////
  1881. // utility interfaces
  1882. ///////////////////////////////////////////////////////////////////////////////////////
  1883.  
  1884.     [
  1885.         object,
  1886.         hidden,
  1887.         nonextensible,
  1888.         uuid(3B21263F-26E8-489d-AAC4-924F7EFD9511),
  1889.         helpstring("Broadcast Event Service Firing/Reflecting Interface"),
  1890.         pointer_default(unique)
  1891.     ]
  1892.     interface IBroadcastEvent : IUnknown
  1893.     {
  1894.         HRESULT Fire(GUID EventID);
  1895.     };
  1896.  
  1897.  
  1898. //////////////////////////////////////////////////////////////////////////////////////
  1899. //////////////////////////////////////////////////////////////////////////////////////
  1900. // TYPELIB & CoClasses
  1901. //////////////////////////////////////////////////////////////////////////////////////
  1902. //////////////////////////////////////////////////////////////////////////////////////
  1903. [
  1904.     uuid(9B085638-018E-11d3-9D8E-00C04F72D980),
  1905.     version(1.0),
  1906.     helpstring("Microsoft Tuner 1.0 Type Library")
  1907. ]
  1908. library TunerLib
  1909. {
  1910.     importlib("stdole2.tlb");
  1911.  
  1912.     // SystemTuningSpaces class
  1913.     [
  1914.         uuid(D02AAC50-027E-11d3-9D8E-00C04F72D980),
  1915.         helpstring("SystemTuningSpace Class")
  1916.     ]
  1917.     coclass SystemTuningSpaces
  1918.     {
  1919.         [default] interface ITuningSpaceContainer;
  1920.     };
  1921.  
  1922.     // NOTE: there is no object factory for this class.  the implementation for the underlying
  1923.     // code is a c++ abstract base class.  this coclass is only provided here to
  1924.     // force vb to expose the base interface to enable polymorphic access to 
  1925.     // derived objects
  1926.     [
  1927.         hidden, restricted,
  1928.         uuid(5FFDC5E6-B83A-4b55-B6E8-C69E765FE9DB),
  1929.         helpstring("dummy class to expose base tuning space i/f to VB")
  1930.     ]
  1931.     coclass TuningSpace
  1932.     {
  1933.         [default] interface ITuningSpace;
  1934.     };
  1935.  
  1936.  
  1937.     [
  1938.         uuid(A2E30750-6C3D-11d3-B653-00C04F79498E),
  1939.         helpstring("ATSC Digital Broadcast Tuning Space Class")
  1940.     ]
  1941.     coclass ATSCTuningSpace
  1942.     {
  1943.         [default] interface IATSCTuningSpace;
  1944.     };
  1945.  
  1946.     [
  1947.         uuid(8A674B4C-1F63-11d3-B64C-00C04F79498E),
  1948.         helpstring("Analog Radio Tuning Space Class")
  1949.     ]
  1950.     coclass AnalogRadioTuningSpace
  1951.     {
  1952.         [default] interface IAnalogRadioTuningSpace;
  1953.     };
  1954.  
  1955.     [
  1956.         uuid(F9769A06-7ACA-4e39-9CFB-97BB35F0E77E),
  1957.         helpstring("Auxiliary Inputs Tuning Space Class")
  1958.     ]
  1959.     coclass AuxInTuningSpace
  1960.     {
  1961.         [default] interface IAuxInTuningSpace;
  1962.     };
  1963.  
  1964.     [
  1965.         uuid(8A674B4D-1F63-11d3-B64C-00C04F79498E),
  1966.         helpstring("Analog TV Tuning Space Class")
  1967.     ]
  1968.     coclass AnalogTVTuningSpace
  1969.     {
  1970.         [default] interface IAnalogTVTuningSpace;
  1971.     };
  1972.  
  1973.     [
  1974.         uuid(C6B14B32-76AA-4a86-A7AC-5C79AAF58DA7),
  1975.         helpstring("DVB Tuning Space Class")
  1976.     ]
  1977.     coclass DVBTuningSpace
  1978.     {
  1979.         [default] interface IDVBTuningSpace2;
  1980.         interface IDVBTuningSpace;
  1981.     };
  1982.  
  1983.     [
  1984.         uuid(B64016F3-C9A2-4066-96F0-BD9563314726),
  1985.         helpstring("DVB Satellite Tuning Space Class")
  1986.     ]
  1987.     coclass DVBSTuningSpace
  1988.     {
  1989.         [default] interface IDVBSTuningSpace;
  1990.     };
  1991.  
  1992.  
  1993.     // ComponentTypes container class
  1994.     [
  1995.         uuid(A1A2B1C4-0E3A-11d3-9D8E-00C04F72D980),
  1996.         helpstring("Component Types Collection Class")
  1997.     ]
  1998.     coclass ComponentTypes
  1999.     {
  2000.         [default] interface IComponentTypes;
  2001.     };
  2002.  
  2003.     // ComponentType class
  2004.     [
  2005.         uuid(823535A0-0318-11d3-9D8E-00C04F72D980),
  2006.         helpstring("ComponentType Class")
  2007.     ]
  2008.     coclass ComponentType
  2009.     {
  2010.         [default] interface IComponentType;
  2011.     };
  2012.  
  2013.     // Language ComponentType class
  2014.     [
  2015.         uuid(1BE49F30-0E1B-11d3-9D8E-00C04F72D980),
  2016.         helpstring("LanguageComponentType Class")
  2017.     ]
  2018.     coclass LanguageComponentType
  2019.     {
  2020.         [default] interface ILanguageComponentType;
  2021.     };
  2022.  
  2023.     // MPEG2 ComponentType class
  2024.     [
  2025.         uuid(418008F3-CF67-4668-9628-10DC52BE1D08),
  2026.         helpstring("MPEG2ComponentType Class")
  2027.     ]
  2028.     coclass MPEG2ComponentType
  2029.     {
  2030.         [default] interface IMPEG2ComponentType;
  2031.     };
  2032.  
  2033.     // ATSC ComponentType class
  2034.     [
  2035.         uuid(A8DCF3D5-0780-4ef4-8A83-2CFFAACB8ACE),
  2036.         helpstring("ATSCComponentType Class")
  2037.     ]
  2038.     coclass ATSCComponentType
  2039.     {
  2040.         [default] interface IATSCComponentType;
  2041.     };
  2042.  
  2043.     // Components class
  2044.     [
  2045.         hidden, restricted,
  2046.         uuid(809B6661-94C4-49e6-B6EC-3F0F862215AA),
  2047.         helpstring("Components Collection Class")
  2048.     ]
  2049.     coclass Components
  2050.     {
  2051.         [default] interface IComponents;
  2052.     };
  2053.  
  2054.     // Component class
  2055.     // the components can only be created by network provider/tif.  client apps
  2056.     // retrieve them from a filled-in tune request by either loading a persisted tune
  2057.     // request that has been filled in by a proper guide store loader or by re-getting
  2058.     // the current tune request property which will have this filled in by the network
  2059.     // provider
  2060.     [
  2061.         hidden, restricted,
  2062.         uuid(59DC47A8-116C-11d3-9D8E-00C04F72D980),
  2063.         helpstring("Component Class")
  2064.     ]
  2065.     coclass Component
  2066.     {
  2067.         [default] interface IComponent;
  2068.     };
  2069.  
  2070.     // MPEG2 Component class
  2071.     [
  2072.         hidden, restricted,
  2073.         uuid(055CB2D7-2969-45cd-914B-76890722F112),
  2074.         helpstring("MPEG2 Component Class")
  2075.     ]
  2076.     coclass MPEG2Component
  2077.     {
  2078.         [default] interface IMPEG2Component;
  2079.     };
  2080.  
  2081.  
  2082.     // NOTE: there is no object factory for this class.  the implementation for the underlying
  2083.     // code is a c++ abstract base class.  this coclass is only provided here to
  2084.     // force vb to expose the base interface to enable polymorphic access to 
  2085.     // derived objects
  2086.     [
  2087.         hidden, restricted,
  2088.         uuid(B46E0D38-AB35-4a06-A137-70576B01B39F),
  2089.         helpstring("dummy class to expose base tune request i/f to VB")
  2090.     ]
  2091.     coclass TuneRequest
  2092.     {
  2093.         [default] interface ITuneRequest;
  2094.     };
  2095.  
  2096.  
  2097.     // NOTE: the tuning request factories should not be invoked directly.
  2098.     // instead apps should use ITuningSpace::CreateTuningRequest to obtain a correctly
  2099.     // initialized tuning request of the appropriate type for that space.
  2100.     // the object factories are provided to allow generic code to a load a previously persisted
  2101.     // tune request object.
  2102.     [
  2103.         hidden,
  2104.         restricted,
  2105.         uuid(0369B4E5-45B6-11d3-B650-00C04F79498E),
  2106.         helpstring("Channel Tune Request")
  2107.     ]
  2108.     coclass ChannelTuneRequest
  2109.     {
  2110.         [default] interface IChannelTuneRequest;
  2111.     };
  2112.  
  2113.     [
  2114.         hidden,
  2115.         restricted,
  2116.         uuid(0369B4E6-45B6-11d3-B650-00C04F79498E),
  2117.         helpstring("ATSC Channel Tune Request")
  2118.     ]
  2119.     coclass ATSCChannelTuneRequest
  2120.     {
  2121.         [default] interface IATSCChannelTuneRequest;
  2122.     };
  2123.  
  2124.     // NOTE: there is no object factory for this class.  the implementation for the underlying
  2125.     // code is a c++ abstract base class.  this coclass is only provided here to
  2126.     // force vb to expose the base interface to enable polymorphic access to 
  2127.     // derived objects
  2128.     [
  2129.         hidden, restricted,
  2130.         uuid(0955AC62-BF2E-4cba-A2B9-A63F772D46CF),
  2131.         helpstring("dummy class to expose mpeg2 request i/f to VB")
  2132.     ]
  2133.     coclass MPEG2TuneRequest
  2134.     {
  2135.         [default] interface IMPEG2TuneRequest;
  2136.     };
  2137.  
  2138.     [
  2139.         uuid(2C63E4EB-4CEA-41b8-919C-E947EA19A77C),
  2140.         helpstring("Factory for creating IMPEG2TuneRequest")
  2141.     ]
  2142.     coclass MPEG2TuneRequestFactory
  2143.     {
  2144.         [default] interface IMPEG2TuneRequestFactory;
  2145.     };
  2146.  
  2147.  
  2148.     // NOTE: there is no object factory for this class.  the implementation for the underlying
  2149.     // code is a c++ abstract base class.  this coclass is only provided here to
  2150.     // force vb to expose the base interface to enable polymorphic access to 
  2151.     // derived objects
  2152.     [
  2153.         hidden, restricted,
  2154.         uuid(0888C883-AC4F-4943-B516-2C38D9B34562),
  2155.         helpstring("dummy class to expose base locator i/f to VB")
  2156.     ]
  2157.     coclass Locator
  2158.     {
  2159.         [default] interface ILocator;
  2160.     };
  2161.  
  2162.     // its not intended that client apps actually create locators.  the network
  2163.     // provider in combination with the transport information filter(TIF) are the 
  2164.     // only modules in the system that actually know the correct values for these objects
  2165.     // however, for testing purposes, its necessary to allow these to be created.
  2166.     // instead, normally these will simply be passed around opaquely since they're a 
  2167.     // property of the base tune request interface.
  2168.     [
  2169.         uuid(8872FF1B-98FA-4d7a-8D93-C9F1055F85BB),
  2170.         helpstring("ATSC Locator")
  2171.     ]
  2172.     coclass ATSCLocator
  2173.     {
  2174.         [default] interface IATSCLocator;
  2175.     };
  2176.  
  2177.     [
  2178.         uuid(9CD64701-BDF3-4d14-8E03-F12983D86664),
  2179.         helpstring("DVB-Terrestrial Locator")
  2180.     ]
  2181.     coclass DVBTLocator
  2182.     {
  2183.         [default] interface IDVBTLocator;
  2184.     };
  2185.  
  2186.     [
  2187.         uuid(1DF7D126-4050-47f0-A7CF-4C4CA9241333),
  2188.         helpstring("DVB-Satellite Locator")
  2189.     ]
  2190.     coclass DVBSLocator
  2191.     {
  2192.         [default] interface IDVBSLocator;
  2193.     };
  2194.  
  2195.     [
  2196.         uuid(C531D9FD-9685-4028-8B68-6E1232079F1E),
  2197.         helpstring("DVB-Cable Locator")
  2198.     ]
  2199.     coclass DVBCLocator
  2200.     {
  2201.         [default] interface IDVBCLocator;
  2202.     };
  2203.  
  2204.     [
  2205.         hidden,
  2206.         restricted,
  2207.         uuid(15D6504A-5494-499c-886C-973C9E53B9F1),
  2208.         helpstring("DVB Tune Request")
  2209.     ]
  2210.     coclass DVBTuneRequest
  2211.     {
  2212.         [default] interface IDVBTuneRequest;
  2213.     };
  2214.  
  2215. // Sample tuner class definition:
  2216. //
  2217. //  [
  2218. //      uuid(<some guid>),
  2219. //      helpstring("My Tuner object")
  2220. //  ]
  2221. //  coclass MyTuner
  2222. //  {
  2223. //      [default] interface ITuner;
  2224. //      interface IMyTunerCustomFeatureInterface;
  2225. //  };
  2226.  
  2227. ///////////////////////////////////////////////////////////////////////////////////////
  2228. // utility objects
  2229. ///////////////////////////////////////////////////////////////////////////////////////
  2230.     [
  2231.         hidden, restricted,
  2232.         uuid(8A674B49-1F63-11d3-B64C-00C04F79498E),
  2233.         helpstring("Create property bag backed by registry")
  2234.     ]
  2235.     coclass CreatePropBagOnRegKey
  2236.     {
  2237.         interface ICreatePropBagOnRegKey;
  2238.     };
  2239.  
  2240.     [
  2241.         hidden, restricted,
  2242.         uuid(0B3FFB92-0919-4934-9D5B-619C719D0202),
  2243.         helpstring("DShow Broadcast Event Service Object")
  2244.     ]
  2245.     coclass BroadcastEventService
  2246.     {
  2247.         interface IBroadcastEvent;
  2248.     };
  2249.  
  2250. cpp_quote("#define SID_SBroadcastEventService CLSID_BroadcastEventService")
  2251.     
  2252. }
  2253.  
  2254. // end of file -- tuner.idl
  2255.